home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #1 / Amiga Plus CD - 2000 - No. 1.iso / Tools / Dev / mamesrc / include / db.h < prev    next >
C/C++ Source or Header  |  1999-12-03  |  7KB  |  260 lines

  1. #ifndef DB_H
  2. #define DB_H
  3. /**************************************************************************
  4.  *
  5.  * Copyright (C) 1999 Mats Eirik Hansen (mats.hansen@triumph.no)
  6.  *
  7.  * $Id$
  8.  *
  9.  * $Log$
  10.  *
  11.  *************************************************************************/
  12.  
  13. #include <moo/moo.h>
  14.  
  15. typedef uint (*dbbuf_read_f)(void *dbbuf, void *buf, uint len);
  16. typedef int  (*dbbuf_readstring_f)(void *dbbuf, char **strp);
  17. typedef void (*dbbuf_unreadstring_f)(void *dbbuf);
  18. typedef uint (*dbbuf_write_f)(void *dbbuf, void *buf, uint len);
  19. typedef int  (*dbbuf_writestring_f)(void *dbbuf, char *str);
  20.  
  21. typedef struct
  22. {
  23.   obj_t                Obj;
  24.   dbbuf_read_f         Read;
  25.   dbbuf_readstring_f   ReadString;
  26.   dbbuf_unreadstring_f UnReadString;
  27.   dbbuf_write_f        Write;
  28.   dbbuf_writestring_f  WriteString;
  29.   char                 *CurrentString;
  30.   uint                 Flags;
  31.   string_t             *String;
  32.   char                 Buf[512];
  33.   char                 *BufPtr;
  34.   uint                 BufLength;
  35.   uint                 WriteCount;
  36. } dbbuf_t;
  37.  
  38. #define DBBUFF_STRINGUNREAD 1
  39.  
  40. int     dbbufReadString(dbbuf_t *this, char **strp);
  41. void    dbbufUnReadString(dbbuf_t *this);
  42. int     dbbufWriteString(dbbuf_t *this, char *str);
  43. void    dbbufDispose(dbbuf_t *this);
  44. bool_t  dbbufInit(dbbuf_t *this, char *str);
  45. dbbuf_t *dbbufNew(char *str);
  46.  
  47. /* dbbufReadString() return codes. */
  48.  
  49. #define DBRS_OK       0
  50. #define DBRS_MORE     1
  51. #define DBRS_NOSTRING 2
  52.  
  53. typedef struct dbitems
  54. {
  55.   struct dbitems *Next;
  56.   uint           NumItems;
  57.   char           Items[0];
  58. } dbitems_t;
  59.  
  60. typedef bool_t (*dbobj_accept_f)(void *this, char *name);
  61. typedef int    (*dbobj_read_f)(void *this, int type, int index, dbbuf_t *dbbuf);
  62. typedef int    (*dbobj_write_f)(void *this, int type, int index, dbbuf_t *dbbuf);
  63. typedef void   (*dbobj_setitemsdef_f)(void *this, void *items, uint num_items);
  64. typedef bool_t (*dbobj_isdefault_f)(void *this, int index);
  65. typedef void   (*dbobj_reset_f)(void *this);
  66. typedef void   (*dbobj_foreachitem_f)(void *this, void *item);
  67.  
  68. typedef struct
  69. {
  70.   obj_t               Obj;
  71.   dbobj_accept_f      Accept;
  72.   dbobj_read_f        Read;
  73.   dbobj_write_f       Write;
  74.   dbobj_setitemsdef_f SetItemsDef;
  75.   dbobj_isdefault_f   IsDefault;
  76.   char                *Name;
  77.   int                 Changed;
  78.   uint                ItemSize;
  79.   uint                MinItems;
  80.   uint                NumItems;
  81.   uint                CurrentItem;
  82.   void                *CurrentItemAddr;
  83.   dbitems_t           DBItems;
  84. } dbobj_t;
  85.  
  86. #define DBOBJRT_BINARY 0
  87. #define DBOBJRT_STRING 1
  88.  
  89. #define DBOBJWT_BINARY 0
  90. #define DBOBJWT_STRING 1
  91. #define DBOBJWT_HELP   2
  92. #define DBOBJWT_NAME   3
  93.  
  94. bool_t dbobjAccept(dbobj_t *this, char *name);
  95. void   dbobjForEachItem(dbobj_t *this, dbobj_foreachitem_f func);
  96. void   *dbobjGetItemAddr(dbobj_t *this, uint index);
  97. void   *dbobjGetItems(dbobj_t *this);
  98. void   dbobjInitItems(dbobj_t *this);
  99. void   dbobjDispose(dbobj_t *this);
  100. bool_t dbobjInit(dbobj_t *this, char *name, uint num_items, uint min_items, uint item_size);
  101. void   *dbobjNew(char *name, uint num_items, uint min_items, uint item_size);
  102.  
  103. #define DBAccept(obj, name)              (((dbobj_t *)(obj))->Accept(obj,name))
  104. #define DBRead(obj, type, index, dbbuf)  (((dbobj_t *)(obj))->Read(obj,type,index,dbbuf))
  105. #define DBWrite(obj, type, index, dbbuf) (((dbobj_t *)(obj))->Write(obj,type,index,dbbuf))
  106. #define DBIsDefault(obj, index)          (((dbobj_t *)(obj))->IsDefault(obj,index))
  107. #define DBReset(obj)                     (((dbobj_t *)(obj))->Reset(obj))
  108.  
  109. typedef struct
  110. {
  111.   dbobj_t *DBObj;
  112.   uint    Index;
  113. } dbobjref_t;
  114.  
  115. typedef struct
  116. {
  117.   dbbuf_t     DBBuf;
  118.   char       *Name;
  119.   FILE       *File;
  120.   uint       NumDBObjs;
  121.   dbobjref_t *DBObjRefs;
  122. } dbfile_t;
  123.  
  124. /* dbfile API: */
  125.  
  126. dbfile_t *dbfileNew(char *name, void *dbobjs,...);
  127. bool_t   dbfileInit(dbfile_t *this, char *name, void *dbobjs,...);
  128. void     dbfileDispose(dbfile_t *this);
  129. int      dbfileLoad(dbfile_t *this, char *name);
  130. int      dbfileSaveAs(dbfile_t *this, char *name);
  131. int      dbfileSave(dbfile_t *this);
  132.  
  133. typedef struct
  134. {
  135.   dbbuf_t    DBBuf;
  136.   int        ArgC;
  137.   char       **ArgV;
  138.   int        ArgI;
  139.   char       *Src;
  140.   int        WriteCount;
  141.   uint       NumDBObjs;
  142.   dbobjref_t *DBObjRefs;
  143. } dbarg_t;
  144.  
  145. /* dbarg API: */
  146.  
  147. dbarg_t *dbargNew(void *dbobjs,...);
  148. bool_t  dbargInit(dbarg_t *this, void *dbobjs,...);
  149. void    dbargDispose(dbarg_t *this);
  150. int     dbargParse(dbarg_t *this, int argc, char **argv, uint index);
  151. void    dbargPrintHelp(dbarg_t *this);
  152.  
  153. typedef struct
  154. {
  155.   dbobj_t DBObj;
  156.   uint    NumDBObjs;
  157. } dbsection_t;
  158.  
  159. /* dbsection API: */
  160.  
  161. dbsection_t *dbsectionNew(char *name, void *dbobjs,...);
  162.  
  163. typedef struct
  164. {
  165.   dbobj_t DBObj;
  166.   char    **Names;
  167.   uint    CurrentIndex;
  168.   uint    NumDBObjs;
  169. } dbsections_t;
  170.  
  171. /* dbsections API: */
  172.  
  173. dbsections_t *dbsectionsNew(char **names, void *dbobjs,...);
  174.  
  175. typedef struct
  176. {
  177.   dbobj_t DBObj;
  178.   int     Def;
  179.   int     Max;
  180.   int     Min;
  181. } dbint_t;
  182.  
  183. dbint_t *dbintNew(char *name, uint num_items, uint min_items, int def, int max, int min);
  184. int     dbintSet(dbint_t *dbint, uint index, int val);
  185. int     *dbintGetAddr(dbint_t *dbint, uint index);
  186. int     dbintGet(dbint_t *dbint, uint index);
  187.  
  188. typedef struct
  189. {
  190.   dbobj_t   DBObj;
  191.   uint    Def;
  192.   uint    Max;
  193.   uint    Min;
  194. } dbuint_t;
  195.  
  196. dbuint_t *dbuintNew(char *name, uint num_items, uint min_items, uint def, uint max, uint min);
  197. int      dbuintSet(dbuint_t *dbint, uint index, uint val);
  198. uint     *dbuintGetAddr(dbuint_t *dbint, uint index);
  199. uint     dbuintGet(dbuint_t *dbint, uint index);
  200.  
  201. typedef struct
  202. {
  203.   char  *Name;
  204.   int   Val;
  205. } dbenumdef_t;
  206.  
  207. typedef struct
  208. {
  209.   dbobj_t   DBObj;
  210.   char    Def;
  211.   dbenumdef_t *DBEnumDefs;
  212. } dbenum_t;
  213.  
  214. /* dbenum API: */
  215.  
  216. dbenum_t *dbenumNew(char *name, uint num_items, uint min_items, char def, dbenumdef_t *dbenum_defs);
  217. int      dbenumSet(dbenum_t *dbenum, uint index, char val);
  218. char     *dbenumGetAddr(dbenum_t *dbenum, uint index);
  219. char     dbenumGet(dbenum_t *dbenum, uint index);
  220.  
  221. typedef dbenum_t dbbool_t;
  222.  
  223. /* dbbool API: */
  224.  
  225. dbbool_t *dbboolNew(char *name, uint num_items, uint min_items, char def);
  226. #define  dbboolSet(dbbool,index,val) dbenumSet(dbbool,index,val)
  227. #define  dbboolGetAddr(dbbool,index) dbenumGetAddr(dbbool,index)
  228. #define  dbboolGet(dbbool,index)     dbenumGet(dbbool,index)
  229.  
  230. typedef struct
  231. {
  232.   dbobj_t DBObj;
  233.   char    *Def;
  234.   char    **Array;
  235.   uint    ArrayLength;
  236. } dbstring_t;
  237.  
  238. dbstring_t *dbstringNew(char *name, uint num_items, uint min_items, char *def);
  239. int        dbstringSet(dbstring_t *this, uint index, char *str);
  240. string_t   **dbstringGetAddr(dbstring_t *this, uint index);
  241. string_t   *dbstringGetString(dbstring_t *this, uint index);
  242. char       *dbstringGet(dbstring_t *this, uint index);
  243. char       **dbstringGetArray(dbstring_t *this);
  244.  
  245. #define DBEND ((void *)(~0))
  246.  
  247. #define DBE_OK            0
  248. #define DBE_ERROR         1
  249. #define DBE_NOSTRING      2
  250. #define DBE_ILLEGALSTRING 3
  251. #define DBE_MAXCLIPPED    4
  252. #define DBE_MINCLIPPED    5
  253. #define DBE_NOITEM        6
  254. #define DBE_ILLEGALVALUE  7
  255.  
  256. #define DBFE_OK         0
  257. #define DBFE_OPENFAILED 1
  258.  
  259. #endif
  260.